﻿#pragma once

#include "../MonsterObject.h"
#include "../MapObject.h"
#include "../../MirDatabase/MonsterInfo.h"
#include "../DelayedAction.h"
#include "../../../Shared/Packet.h"
#include <string>
#include <vector>
#include <any>
#include "exceptionhelper.h"
#include "../../../stringhelper.h"

using namespace Server::MirDatabase;
using namespace Server::MirEnvir;
namespace S = ServerPackets;

namespace Server::MirObjects::Monsters
{
    class CharmedSnake : public MonsterObject
    {
    public:
        bool Summoned = false;
        long long AliveTime = 0;
        MapObject *MasterTotem;

        virtual ~CharmedSnake()
        {
            delete MasterTotem;
        }

    protected:
        CharmedSnake(MonsterInfo *info);

    public:
        std::string getName() const override;
        void setName(const std::string &value) override;

        void Process() override;

        void Process(DelayedAction *action) override;

       // protected override void ProcessAI()
       // {
           // ProcessSearch();
           // ProcessRoam();
           // ProcessTarget();
        //}

    protected:
        void ProcessAI() override;

        void ProcessSearch() override;

        void ProcessRoam() override;

        void ProcessTarget() override;

        void Attack() override;

        void CompleteAttack(std::vector<std::any> &data) override;

    public:
        void Die() override;

        void Spawned() override;

        Packet *GetInfo() override;
    };
}
